//package morenoapp.model.impl;
//
//import java.awt.geom.Point2D;
//import morenoapp.model.data.MorenoIdFace;
//import morenoapp.model.data.MorenoQuestionFace;
//import morenoapp.model.data.MorenoRespondentFace;
//import morenoapp.model.enums.MorenoSex;
//import morenoapp.model.view.MorenoSociogramConfig;
//import morenoapp.model.view.listeners.MorenoViewChangeListener;
//import morenoapp.util.I18N;
//import org.json.JSONArray;
//import org.json.JSONException;
//import org.json.JSONObject;
//
///**
// *
// * @author root
// */
//public class MorenoSociogramViewImpl implements MorenoSociogramConfig {
//    JSONArray jsonArray;
//    int index = 0;
//    public MorenoSociogramViewImpl() {
//        reset();
//    }
//
//    protected JSONObject getJsonCurrent() {
//        try {
//            return jsonArray.getJSONObject(index);
//        } catch (JSONException ex) {
//            throw new IllegalStateException("Should not happen", ex);
//        }
//    }
//
//    public String getViewName() {
//        return getString(VIEW_NAME, I18N.get("sociogram_view.default_name"));
//    }
//
//    public void setViewName(String name) {
//        setProperty(VIEW_NAME, name);
//    }
//
//    public void addView(String name, boolean copyFromCurrent) {
//        if (name.trim().isEmpty()){
//            throw new IllegalArgumentException("View name must not be empty"); //NOI18N
//        }
//        try {
//            if (copyFromCurrent == true) {
//                jsonArray.put(new JSONObject(getJsonCurrent().toString()));
//            } else {
//                jsonArray.put(new JSONObject());
//            }
//            index = jsonArray.length() - 1;
//            setViewName(name);
//        } catch (JSONException ex) {
//            throw new IllegalStateException("Should not happen", ex);
//        }
//    }
//
//    public void deleteView(int index) {
//        if (index == 0) {
//            throw new IllegalArgumentException("Root view can not be deleted"); //NOI18N
//        } else {
//            jsonArray.remove(index);
//            if (index > jsonArray.length()) {
//                index--;
//            }
//        }
//    }
//
//    public int getCurrentView() {
//        return index;
//    }
//
//    public String getViewName(int index) {
//        try {
//            return getString(jsonArray.getJSONObject(index), VIEW_NAME, "Unknown"); //NOI18N
//        } catch (JSONException ex) {
//            throw new RuntimeException("Should not happen", ex);
//        }
//    }
//
//    public int getViewsCount() {
//        return jsonArray.length();
//    }
//
//    public void setCurrentView(int newIndex) {
//        if (newIndex < 0 || newIndex >= jsonArray.length()) {
//            throw new IllegalArgumentException("Index out of bounds: " + newIndex);
//        } else {
//            this.index = newIndex;
//        }
//    }
//
//    public boolean isAccurateDraw() {
//        return getBoolean(ACCURATE_DRAW, false);
//    }
//
//    public void setAccurateDraw(boolean flag) {
//        setProperty(ACCURATE_DRAW, flag);
//    }
//
//    public int getRingStep() {
//        return getInt(RING_STEP, 25);
//    }
//
//    public void setRingStep(int step) {
//        setProperty(RING_STEP, step);
//    }
//
//    public boolean isDisplaySex() {
//        return getBoolean(DISPLAY_SEX, true);
//    }
//
//    public void setDisplaySex(boolean flag) {
//        setProperty(DISPLAY_SEX, flag);
//    }
//
//    public boolean isDisplayNames() {
//        return getBoolean(DISPLAY_NAMES, false);
//    }
//
//    public void setDisplayNames(boolean flag) {
//        setProperty(DISPLAY_NAMES, flag);
//    }
//
//    public boolean isDisplayMetrics() {
//        return getBoolean(DISPLAY_METRICS, false);
//    }
//
//    public void setDisplayMetrics(boolean flag) {
//        setProperty(DISPLAY_METRICS, flag);
//    }
//
//    public boolean isDisplayTooltips() {
//        return getBoolean(DISPLAY_TOOLTIPS, false);
//    }
//
//    public void setDisplayTooltips(boolean flag) {
//        setProperty(DISPLAY_TOOLTIPS, flag);
//    }
//
//    public boolean isDisplayCorrections() {
//        return getBoolean(DISPLAY_CORRECTIONS, true);
//    }
//
//    public void setDisplayCorrections(boolean flag) {
//        setProperty(DISPLAY_CORRECTIONS, flag);
//    }
//
//    public boolean isHideMale() {
//        return getBoolean(HIDE_MALE, false);
//    }
//
//    public void setHideMale(boolean flag) {
//        setProperty(HIDE_MALE, flag);
//    }
//
//    public boolean isHideFemale() {
//        return getBoolean(HIDE_FEMALE, false);
//    }
//
//    public void setHideFemale(boolean flag) {
//        setProperty(HIDE_FEMALE, flag);
//    }
//
//    public Point2D getRespondentPosition(MorenoRespondentFace resp) {
//        return getMapIdToPoint(RESPONDENT_POSITION, resp, 0, 0);
//    }
//
//    public void setRespondentPosition(MorenoRespondentFace resp, Point2D p) {
//        setMapIdToPoint(RESPONDENT_POSITION, resp, p);
//    }
//
//    public boolean isDisplayRelationships(MorenoQuestionFace quest) {
//        return getMapIdToBoolean(DISPLAY_RELATIONSHIPS, quest, true);
//    }
//
//    public void setDisplayRelationships(MorenoQuestionFace quest, boolean doDisplay) {
//        setMapIdToBoolean(DISPLAY_RELATIONSHIPS, quest, doDisplay);
//    }
//
//    public boolean isHideRespondent(MorenoRespondentFace resp) {
//        return getMapIdToBoolean(HIDE_RESPONDENT, resp, false) ||
//                (isHideMale() && resp.getSex() == MorenoSex.MALE) ||
//                (isHideFemale() && resp.getSex() == MorenoSex.FEMALE);
//    }
//
//    public void setHideRespondent(MorenoRespondentFace resp, boolean flag) {
//        setMapIdToBoolean(HIDE_RESPONDENT, resp, flag);
//    }
//
//    //-------------------------------------------------------------------------
//    protected String getString(String property, String _default) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, _default);
//            }
//            return getJsonCurrent().getString(property);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected String getString(JSONObject jsonCurrent, String property, String _default) {
//        try {
//            if (jsonCurrent.has(property) == false) {
//                jsonCurrent.put(property, _default);
//            }
//            return jsonCurrent.getString(property);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected int getInt(String property, int _default) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, _default);
//            }
//            return getJsonCurrent().getInt(property);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected boolean getBoolean(String property, boolean _default) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, _default);
//            }
//            return getJsonCurrent().getBoolean(property);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected void setProperty(String property, Object value) {
//        try {
//            if (value instanceof Boolean ||
//                    value instanceof Integer ||
//                    value instanceof String) {
//                getJsonCurrent().put(property, value);
//            } else {
//                throw new RuntimeException("Unsupported value " + value + " for property " + property);
//            }
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected boolean getMapEnumToBoolean(String property, Enum key, boolean _default) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            if (map.has(key.name()) == false) {
//                map.put(key.name(), _default);
//            }
//            return map.getBoolean(key.name());
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected void setMapEnumToBoolean(String property, Enum key, boolean value) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            map.put(key.name(), value);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected Point2D getMapIdToPoint(String property, MorenoIdFace key, double _defaultX, double _defaultY) {
//        try {
//            //root value
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            //value corresponded to Id
//            String keyName = String.valueOf(key.getId());
//            if (map.has(keyName) == false) {
//                JSONArray defaultArray = new JSONArray();
//                defaultArray.put(_defaultX);
//                defaultArray.put(_defaultY);
//                map.put(keyName, defaultArray);
//            }
//            //point value
//            JSONArray xyArray = map.getJSONArray(keyName);
//            return new Point2D.Double(xyArray.getDouble(0), xyArray.getDouble(1));
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected void setMapIdToPoint(String property, MorenoIdFace key, Point2D value) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            String keyName = String.valueOf(key.getId());
//            JSONArray arrValue = new JSONArray();
//            arrValue.put(value.getX());
//            arrValue.put(value.getY());
//            map.put(keyName, arrValue);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected boolean getMapIdToBoolean(String property, MorenoIdFace key, boolean _default) {
//        try {
//            //root value
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            //value corresponded to Id
//            String keyName = String.valueOf(key.getId());
//            if (map.has(keyName) == false) {
//                map.put(keyName, _default);
//            }
//            //point value
//            return map.getBoolean(keyName);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    protected void setMapIdToBoolean(String property, MorenoIdFace key, boolean value) {
//        try {
//            if (getJsonCurrent().has(property) == false) {
//                getJsonCurrent().put(property, new JSONObject());
//            }
//            JSONObject map = getJsonCurrent().getJSONObject(property);
//            String keyName = String.valueOf(key.getId());
//            map.put(keyName, value);
//        } catch (JSONException ex) {
//            throw new RuntimeException("Shold not happen", ex);
//        }
//    }
//
//    JSONArray getJson() {
//        return jsonArray;
//    }
//
//    void setJson(JSONArray _jsonArray) {
//        this.jsonArray = _jsonArray;
//        if (jsonArray.length() > 0) {
//            index = 0;
//        } else {
//            reset();
//        }
//    }
//
//    void reset() {
//        jsonArray = new JSONArray();
//        jsonArray.put(new JSONObject());
//        index = 0;
//    }
//
//    public void addSociogramChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeSociogramChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void addCanvasChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeCanvasChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void addBackgroudChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeBackgroudChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void addRespondentsChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeRespondentsChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void addRespondentPositionChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeRespondentPositionChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void addRelationshipsChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//    public void removeRelationshipsChangeListener(MorenoViewChangeListener lst) {
//        throw new UnsupportedOperationException("Not supported.");
//    }
//
//}
